home *** CD-ROM | disk | FTP | other *** search
/ By Popular Request 2.0 / By Popular Request 2.0 (Arsenal Computer).ISO / amiga_3 / ezbbs221.lha / Source / eazy2mail.c < prev    next >
C/C++ Source or Header  |  1995-04-12  |  3KB  |  151 lines

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. #include <fcntl.h>
  5. #include <time.h>
  6. #include <proto/dos.h>
  7. #include <proto/exec.h>
  8.  
  9.  
  10.  
  11. #define VERSION "1.10"
  12. static char *version = "\0$VER: eazy2mail " VERSION " " __AMIGADATE__ "";
  13. /* static char *version = "\0$VER: eazy2mail " VERSION " (" __DATE__ ")"; */
  14.  
  15.  
  16.  
  17. #define MAIL_BATCHSCRIPT    "MB_DATA:UUCP/DeliverMail.scp"
  18. #define MAIL_BATCHLOCK        "MB_DATA:UUCP/DeliverMail.lock"
  19. #define MAIL_BATCHNUM        "MB_DATA:UUCP/DeliverMail.num"
  20. #define MAIL_BATCHFILE        "MB_DATA:UUCP/Mail.%ld"
  21.  
  22.  
  23.  
  24. void space2under(char *s)
  25. {
  26.     if (s) {
  27.         while (*s) {
  28.             if (*s == ' ')
  29.                 *s = '_';
  30.             s++;
  31.         }
  32.     }
  33. }
  34.  
  35.  
  36.  
  37. int main(int argc, char *argv[])
  38. {
  39.     if (argc == 6) {
  40.         FILE *fp, *scp, *lock, *num;
  41.         long seqnum = 0;
  42.         char tmp[80];
  43.  
  44.         /* try to get lock */
  45.  
  46.         while (!(lock = fopen(MAIL_BATCHLOCK, "w")))
  47.             Delay(100);
  48.  
  49.         /* we have the lock, now want the maximum seq-number */
  50.  
  51.         if (num = fopen(MAIL_BATCHNUM, "r")) {
  52.             fscanf(num, "%ld", &seqnum);
  53.             fclose(num);
  54.         }
  55.  
  56.         ++seqnum;
  57.  
  58.         sprintf(tmp, MAIL_BATCHFILE, seqnum);
  59.  
  60.         if (seqnum > 1) {
  61.             while (!(scp = fopen(MAIL_BATCHSCRIPT, "a"))) {
  62.                 Delay(100);
  63.             }
  64.         }
  65.         else {
  66.             while (!(scp = fopen(MAIL_BATCHSCRIPT, "w"))) {
  67.                 Delay(100);
  68.             }
  69.             fprintf(scp, "failat 21\n");
  70.             fprintf(scp, "delete %s\n", MAIL_BATCHNUM);
  71.         }
  72.  
  73.         /* write back new seq-number while script-file is locked by us */
  74.         if (num = fopen(MAIL_BATCHNUM, "w")) {
  75.             fprintf(num, "%ld\n", seqnum);
  76.             fclose(num);
  77.         }
  78.  
  79.         /* now finish writing to script-file */
  80.         fprintf(scp, "sendmail <%s\ndelete %s\n", tmp, tmp);
  81.  
  82.         if (fp = fopen(tmp, "w")) {
  83.             register int c = 0, last = 0;
  84.             time_t t;
  85.             struct tm *ut;
  86.             char uname[16];
  87.             char *sname = argv[2];
  88.             char *tonam = argv[4];
  89.             char *realn = argv[3];
  90.             char *sbjct = argv[5];
  91.  
  92.             time(&t);
  93.             ut = gmtime(&t);
  94.  
  95.             strcpy(uname, argv[1]);
  96.             space2under(uname);
  97.  
  98.             fprintf(fp, "From: %s@%s (%s)\n", uname, sname, realn);
  99.             fprintf(fp, "To: %s\n", tonam);
  100.             fprintf(fp, "Sender: eazybbs@%s\n", sname);
  101.             fprintf(fp, "Subject: %s\n", sbjct);
  102.             fprintf(fp, "MIME-Version: 1.0\n");
  103.  
  104.             /* This is not strictly MIME compliant, but who cares? */
  105.  
  106.             fprintf(fp, "Content-Type: text/plain; charset=ISO-8859-1\n");
  107.             fprintf(fp, "Content-Transfer-Encoding: 8bit\n");
  108.             fprintf(fp, "\n");
  109.  
  110.             while ((c = getchar()) != EOF) {
  111.                 if (last == '\\') {
  112.                     switch (c) {
  113.                     case '\\':
  114.                         fputc(c, fp);
  115.                         break;
  116.                     default:
  117.                         break;
  118.                     }
  119.                     last = 0;
  120.                 }
  121.                 else if (c == '\\') {
  122.                     last = c;
  123.                 }
  124.                 else {
  125.                     fputc(c, fp);
  126.                     last = c;
  127.                 }
  128.             }
  129.             fprintf(fp, "\n");
  130.  
  131.             fclose(fp);
  132.         }
  133.  
  134.         /* close script-file here to prevent it from being started */
  135.         fclose(scp);
  136.  
  137.         while (chmod(MAIL_BATCHSCRIPT, S_IWRITE | S_IREAD | S_IEXECUTE | S_IDELETE | S_ISCRIPT))
  138.             Delay(100);
  139.  
  140.         /* close lock-file here to prevent other ports from processing mails */
  141.         fclose(lock);
  142.  
  143.     }
  144.     else {
  145.         fprintf(stderr, "\033[1;33mEazyBBS\033[0m ⌐ 1988-1995 Andreas M. Kirchwitz\n"
  146.             "Usage: eazy2mail \033[3m<user> <site> <real> <to> <subject> \033[0m <text\n");
  147.     }
  148.  
  149.     exit(0);
  150. }
  151.